package com.bilibili.juc.LockSupport;

import java.util.concurrent.locks.LockSupport;

import static java.util.concurrent.locks.LockSupport.park;

/**
 * 许可证问题
 * new LockSupport(); 这个有问题，它不能new()  // Cannot be instantiated.
 * 许可证unpark()不能累计，无论你发多少个，park都会一次性用完，再次park的时候需要再次发许可证
 */
public class ParkAndUnpark {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("需要使用第一个许可证");
            park();
            System.out.println("拿到第一个许可证");
            System.out.println("需要使用第二个许可证");
            park();
            System.out.println("运行不到这了，因为根本没有两个许可证，许可证不能累计！！！！！1");
        },"t1");
        t1.start();
        //主线程睡眠两秒
//        Thread.sleep(3000);
        //用来发许可让上面的线程干活
        new Thread(()->{
            System.out.println("发第一个许可证");
            LockSupport.unpark(t1);
            System.out.println("再次发放许可证");
            LockSupport.unpark(t1);
        },"测试线程").start();
    }

}
